"""
    可变: list dict set
    不可变:int float bool str

    可变: 指内存地址没变，但是数据发生了变化
    不可变: 指内存地址变，数据发生了变化
"""

# i = 1
# print(id(i))
# i = 2
# print(id(i))
# l = [1,2,3]
# print(id(l))
# l.append(4)
# print(id(l))


"""
    浅拷贝：适用于单层数据结构，或需要保留嵌套对象共享状态的场景。
    深拷贝：适用于需要完全独立副本的场景，尤其是处理嵌套对象时。
"""
import copy
original = [1, [2, 3], 4]
shallow_copy = copy.copy(original)  # 或使用 original.copy()、original[:]

# 修改浅拷贝的第一层元素（不影响原对象）
shallow_copy[0] = 99
print(original)  # 输出: [1, [2, 3], 4]
print(shallow_copy)  # 输出: [99, [2, 3], 4]

# 修改浅拷贝的嵌套对象（影响原对象）
shallow_copy[1][0] = 200
print(original)  # 输出: [1, [200, 3], 4]  ❗嵌套对象被修改
print(shallow_copy)  # 输出: [99, [200, 3], 4]



import copy
original = [1, [2, 3], 4]
deep_copy = copy.deepcopy(original)

# 修改深拷贝的第一层元素（不影响原对象）
deep_copy[0] = 99
print(original)  # 输出: [1, [2, 3], 4]
print(deep_copy)  # 输出: [99, [2, 3], 4]

# 修改深拷贝的嵌套对象（不影响原对象）
deep_copy[1][0] = 200
print(original)  # 输出: [1, [2, 3], 4]  ✅嵌套对象未被修改
print(deep_copy)  # 输出: [99, [200, 3], 4]
